/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import bean.AvaliacaoMEC;
import java.awt.geom.Path2D;
import java.io.Serializable;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author fernando
 */
public class AvaliacaoDAO implements Serializable {

    private Conexao conexao;
    private PreparedStatement ps;

    public AvaliacaoDAO() {
        this.conexao = new ConexaoPostgres();
    }

    public boolean cadastrarAvaliacao(AvaliacaoMEC a, int idCurso) {
        boolean resultado = false;

        try {
            if (a.getPdf().getConteudo() == null ||a.getPdf().getConteudo().length == 0) {
                ps = conexao.getConnection().prepareStatement("INSERT INTO curso_avaliacao(id_curso, nota, ano_inicio, ano_fim) VALUES (?, ?, ?, ?)  ");

                ps.setInt(1, idCurso);

                ps.setInt(2, a.getNota());
                ps.setInt(3, a.getAnoInicio());
                ps.setInt(4, a.getAnoFim());
                ps.executeUpdate();
                conexao.closeConnection();
            } else {

                ps = conexao.getConnection().prepareStatement("INSERT INTO curso_avaliacao(id_curso, nota, ano_inicio, ano_fim, pdf) VALUES (?, ?, ?, ?, ?)  ");

                ps.setInt(1, idCurso);

                ps.setInt(2, a.getNota());
                ps.setInt(3, a.getAnoInicio());
                ps.setInt(4, a.getAnoFim());
                ps.setInt(5, new PDFDao().cadastrarPDF(a.getPdf()));

                ps.executeUpdate();
                conexao.closeConnection();



            }
            resultado = true;

        } catch (SQLException ex) {
            Logger.getLogger(PDFDao.class.getName()).log(Level.SEVERE, null, ex);




            return resultado;
        }
        return resultado;
    }

    public List<AvaliacaoMEC> buscarAvaliacoesCurso(int idCurso) {
        ArrayList<AvaliacaoMEC> avaliacoes = new ArrayList<AvaliacaoMEC>();
        try {
            ps = conexao.getConnection().prepareStatement("SELECT nota, ano_inicio, ano_fim, pdf FROM curso_avaliacao WHERE id_curso = ?");
            ps.setInt(1, idCurso);
            ResultSet rs = ps.executeQuery();
            conexao.closeConnection();
            while (rs.next()) {
                AvaliacaoMEC a = new AvaliacaoMEC();
                if (rs.getInt("pdf") > 0) {
                    a.setPdf(new PDFDao().consultarPDF(rs.getInt("pdf")));
                }
                a.setNota(rs.getInt("nota"));
                a.setAnoFim(rs.getInt("ano_fim"));
                a.setAnoInicio(rs.getInt("ano_inicio"));
                avaliacoes.add(a);
            }
        } catch (SQLException ex) {
            Logger.getLogger(CursoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }


        return avaliacoes;
    }

    public int buscarIdPDFAvaliacao(AvaliacaoMEC avaliacao, int idCurso) {
        int retorno = 0;
        try {
            ps = conexao.getConnection().prepareStatement("SELECT pdf FROM curso_avaliacao WHERE id_curso = ? AND nota = ? AND ano_inicio = ? AND ano_fim = ? ");
            ps.setInt(1, idCurso);
            ps.setInt(2, avaliacao.getNota());
            ps.setInt(3, avaliacao.getAnoInicio());
            ps.setInt(4, avaliacao.getAnoFim());
            ResultSet rs = ps.executeQuery();
            conexao.closeConnection();
            if (rs.next()) {
                retorno = rs.getInt("pdf");
            }
        } catch (SQLException ex) {
            Logger.getLogger(CursoDAO.class.getName()).log(Level.SEVERE, null, ex);

            return retorno;
        }
        return retorno;
    }

    public boolean removerAvaliacao(AvaliacaoMEC avaliacao, int idCurso) {
        boolean retorno = false;
        avaliacao.getPdf().setId(this.buscarIdPDFAvaliacao(avaliacao, idCurso));
        if (avaliacao.getPdf().getId() > 0) {
            new PDFDao().removerPDF(avaliacao.getPdf().getId());
        }

        try {
            ps = conexao.getConnection().prepareStatement("DELETE FROM curso_avaliacao WHERE id_curso = ? AND nota = ? AND ano_inicio = ? AND ano_fim = ?");
            ps.setInt(1, idCurso);
            ps.setInt(2, avaliacao.getNota());
            ps.setInt(3, avaliacao.getAnoInicio());
            ps.setInt(4, avaliacao.getAnoFim());
            ps.executeUpdate();
            conexao.closeConnection();
            retorno = true;

        } catch (SQLException ex) {
            Logger.getLogger(CursoDAO.class.getName()).log(Level.SEVERE, null, ex);

            return retorno;
        }


        return retorno;


    }
}
